/**
* \file Utilitaire.cpp
* \brief Ensemble des methodes utiles au deroulement du Jeu
* \author FEKI Mehdi && RIPOCHE Emilien
* \version 1.0
* \date 04/12/2011
*/

#include "Utilitaire.h"
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

Utilitaire* Utilitaire::INSTANCE = NULL;

Utilitaire* Utilitaire::getSingletonUtilitaire() {
	if (INSTANCE == NULL) {
		INSTANCE = new Utilitaire();
	}
	return INSTANCE;
}

unsigned int Utilitaire::lancerDe() const { 
	return rand()%FACES + 1; 
}

Utilitaire::Utilitaire() { 
	srand((unsigned int)time(NULL));
	previousId = -1;
}

void Utilitaire::destructeurUtilitaire() {
	if(INSTANCE != NULL) {
		delete INSTANCE;
		INSTANCE = NULL;
	} 
}

unsigned int Utilitaire::getUniqueId(){
	return ++previousId;
};

/*
int main() {
	// On cree deux singletons
	Utilitaire* util1 = Utilitaire::getInstance();
	Utilitaire* util2 = Utilitaire::getInstance();
	// On teste la validite du singleton
	if(util1 == util2) {
		cout << "Le singleton Utilitaire fonctionne !" << endl;
	}
	else {
		cout << "Probleme singleton Utilitaire !!!" << endl;
	}
	util2->destructeurUtilitaire();
	// On teste la methode lancerDe()
	for(int i=0; i<10; i++) {
		cout << "Face = " << util1->lancerDe() << endl;
	}
	util1->destructeurUtilitaire();

	system("pause");
	return EXIT_SUCCESS;
}
*/